﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Taschenrechner.DataObjects;
using Taschenrechner.Business;

namespace Taschenrechner
{
    public partial class Main : Form
    {

        private RechenElement[] elemente;
        bool neueEingabe;

        public Main()
        {
            InitializeComponent();
        }

        private void btn0_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "0", ref neueEingabe);
        }

        private void btn1_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "1", ref neueEingabe);
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "2", ref neueEingabe);
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "3", ref neueEingabe);
        }

        private void btn4_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "4", ref neueEingabe);
        }

        private void btn5_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "5", ref neueEingabe);
        }

        private void btn6_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "6", ref neueEingabe);
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "7", ref neueEingabe);
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "8", ref neueEingabe);
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, "9", ref neueEingabe);
        }

        private void btnKomma_Click(object sender, EventArgs e)
        {
            this.txtAnzeige.Text = Berechnung.PruefeEingabe(this.txtAnzeige.Text, ",", ref neueEingabe);
        }

        private void btnErgebnis_Click(object sender, EventArgs e)
        {
            try
            {
                Berechnung.AddElement(this.txtAnzeige.Text, "=", elemente);
                this.txtAnzeige.Text = Berechnung.Rechne(elemente);
                Berechnung.ResetElemente(ref elemente, ref neueEingabe);
            }
            catch (NotSupportedException)
            {
                MeldungZuVieleOperationen(); 
            }
        }

        private void btnPlus_Click(object sender, EventArgs e)
        {
            Berechnung.AddElement(this.txtAnzeige.Text, "+", elemente);
            this.txtAnzeige.Text = Berechnung.Rechne(elemente);
            Berechnung.ResetElemente(ref elemente, ref neueEingabe);
            Berechnung.AddElement(this.txtAnzeige.Text, "+", elemente);

        }

        private void btnMinus_Click(object sender, EventArgs e)
        {
            Berechnung.AddElement(this.txtAnzeige.Text, "-", elemente);
            this.txtAnzeige.Text = Berechnung.Rechne(elemente);
            Berechnung.ResetElemente(ref elemente, ref neueEingabe);
            Berechnung.AddElement(this.txtAnzeige.Text, "-", elemente);
        }

        private void btnMal_Click(object sender, EventArgs e)
        {
            try
            {
                Berechnung.AddElement(this.txtAnzeige.Text, "*", elemente);
                neueEingabe = true;
            }
            catch (NotSupportedException)
            {
                MeldungZuVieleOperationen();
            }
        }

        private void btnGeteilt_Click(object sender, EventArgs e)
        {
            try
            {

            }
            catch (NotSupportedException)
            {
                Berechnung.AddElement(this.txtAnzeige.Text, "/", elemente);
                neueEingabe = true;
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            Berechnung.ResetElemente(ref elemente, ref neueEingabe); 
            this.txtAnzeige.Text = null;
        }

        private void Main_Load(object sender, EventArgs e)
        {
            Berechnung.ResetElemente(ref elemente, ref neueEingabe);
            
        }

        private void MeldungZuVieleOperationen()
        {
            MessageBox.Show("Es wurde zu viele Operationen mit / und * eingegeben");
            Berechnung.ResetElemente(ref elemente, ref neueEingabe);
            this.txtAnzeige.Text = null;
        }

        private void Tastatur(KeyPressEventArgs e)
        {
            
            if (e.KeyChar == "+".ToCharArray()[0])
            {
                this.btnPlus.Focus();
                btnPlus_Click(null, null);
                return;
            }
            if (e.KeyChar == "-".ToCharArray()[0])
            {
                this.btnMinus.Focus();
                btnMinus_Click(null, null);
                return;
            }
            if (e.KeyChar == "*".ToCharArray()[0])
            {
                this.btnMal.Focus();
                btnMal_Click(null, null);
                return;
            }
            if (e.KeyChar == "/".ToCharArray()[0])
            {
                this.btnGeteilt.Focus();
                btnGeteilt_Click(null, null);
                return;
            }
            if (e.KeyChar == "=".ToCharArray()[0] || e.KeyChar == "#".ToCharArray()[0])
            {
                this.btnErgebnis.Focus();
                btnErgebnis_Click(null, null);
                return;
            }
            if (e.KeyChar == "c".ToCharArray()[0] || e.KeyChar == (char)Keys.Escape)
            {
                this.btnReset.Focus();
                btnReset_Click(null, null);
                return;
            }
            if (e.KeyChar == (char)Keys.D0)
            {
                this.btn0.Focus();
                btn0_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D1)
            {
                this.btn1.Focus();
                btn1_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D2)
            {
                this.btn2.Focus();
                btn2_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D3)
            {
                this.btn3.Focus();
                btn3_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D4)
            {
                this.btn4.Focus();
                btn4_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D5)
            {
                this.btn5.Focus();
                btn5_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D6)
            {
                this.btn6.Focus();
                btn6_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D7)
            {
                this.btn7.Focus();
                btn7_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D8)
            {
                this.btn8.Focus();
                btn8_Click(null, null);
            }
            if (e.KeyChar == (char)Keys.D9)
            {
                this.btn9.Focus();
                btn9_Click(null, null);
            }

        }

        private void btn0_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn1_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn2_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn3_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn4_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn5_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn6_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn7_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn8_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btn9_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnPlus_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnMinus_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnMal_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnGeteilt_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnErgebnis_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        private void btnReset_KeyPress(object sender, KeyPressEventArgs e)
        {
            Tastatur(e);
        }

        

    }
}
